package com.mune.gulimall.ware.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class WareMQConfig {
  @Bean
  public Exchange stockEventExchange() {
    return new TopicExchange("stock-event-exchange", true, false);
  }

  @Bean
  public Queue stockReleaseStockQueue() {
    return new Queue("stock.release.stock.queue", true, false, false);
  }

  @Bean
  public Queue stockDelayQueue() {
    Map<String, Object> argument = new HashMap<>();
    argument.put("x-dead-letter-exchange", "stock-event-exchange");
    argument.put("x-dead-letter-routing-key", "stock.release");
    // 消息过期时间 2分钟
    argument.put("x-message-ttl", 120000);
    return new Queue("stock.delay.queue", true, false, false, argument);
  }

  @Bean
  public Binding stockReleaseBinding() {
    return new Binding("stock.release.stock.queue", Binding.DestinationType.QUEUE, "stock-event-exchange", "stock.release.#", null);
  }

  @Bean
  public Binding stockLockedBinding() {
    return new Binding("stock.delay.queue", Binding.DestinationType.QUEUE, "stock-event-exchange", "stock.locked", null);
  }
}
